Unnecessary using
directives refer to importing namespaces, types or creating aliases that are not used or referenced anywhere in the
code.
Although they don’t affect the runtime behavior of the application after compilation, removing them will:
- Improve the readability and maintainability of the code.
- Help avoid potential naming conflicts.
- Improve the build time, as the compiler has fewer lines to read and fewer types to resolve.
- Reduce the number of items the code editor will show for auto-completion, thereby showing fewer irrelevant suggestions.
Starting with C# 10, it’s possible to define global usings for an entire
project. They reduce the need for repetitive namespace inclusions, but can also mask which namespaces are truly necessary for the code at hand.
Over-relying on them can lead to less transparent code dependencies, especially for newcomers to the project.
Exceptions
The rule will not raise a warning for global using
directives, even if none of the types of that namespace are used in the
project:
global using System.Net.Sockets; // Compliant by exception
Unnecessary using
directives are ignored in ASP.NET Core projects in the following files:
-
_Imports.razor
-
_ViewImports.cshtml